package com.shrct.businessprocess.purchase;

import com.shrct.businessprocess.diagnose.ICanDiagnose;
import com.shrct.businessprocess.project.IHasProject;
import com.shrct.businessprocess.project.RCExchangeRate;
import com.shrct.businessprocess.project.RCProject;
import com.shrct.businessprocess.project.RCProjectMoney;
import com.shrct.businessprocess.purchase.RCBasePurchaseOrder;
import com.shrct.businessprocess.purchase.RCHasPurchaseBudget;
import com.shrct.businessprocess.purchase.RCProductPurchaseRequestStatus;
import com.shrct.businessprocess.purchase.RCPurchaseRequestProcess;
import com.shrct.businessprocess.purchase.RCSupplierPriceQuery;
import com.shrct.businessprocess.purchase.impl.RCBasePurchaseRequestImpl;
import com.shrct.businessprocess.purchase.proxy.RCBasePurchaseRequestProxy;
import edu.fudan.mylang.pf.EntityImplementation;
import edu.fudan.mylang.pf.IModelObject;
import java.util.Collection;
import java.util.Date;
import org.eclipse.xtext.xbase.lib.Procedures.Procedure1;

@EntityImplementation(implementBy = RCBasePurchaseRequestImpl.class)
public interface RCBasePurchaseRequest extends IModelObject, ICanDiagnose, IHasProject {
  public abstract Date getDate();
  
  public abstract RCBasePurchaseRequest setDate(final Date date);
  
  public abstract Date getExpectDate();
  
  public abstract RCBasePurchaseRequest setExpectDate(final Date expectDate);
  
  public abstract RCProjectMoney getExpectCost();
  
  public abstract RCBasePurchaseRequest setExpectCost(final RCProjectMoney expectCost);
  
  public abstract Boolean getIsPassed();
  
  public abstract RCBasePurchaseRequest setIsPassed(final Boolean isPassed);
  
  public abstract Boolean getIsFinished();
  
  public abstract RCBasePurchaseRequest setIsFinished(final Boolean isFinished);
  
  public abstract RCProductPurchaseRequestStatus getStatus();
  
  public abstract RCBasePurchaseRequest setStatus(final RCProductPurchaseRequestStatus status);
  
  public abstract String getComment();
  
  public abstract RCBasePurchaseRequest setComment(final String comment);
  
  public abstract RCHasPurchaseBudget getBudget();
  
  public abstract RCBasePurchaseRequest setBudget(final RCHasPurchaseBudget budget);
  
  public abstract Collection<RCSupplierPriceQuery> getPriceQueries();
  
  public abstract RCSupplierPriceQuery createAndAddtoPriceQueries();
  
  public abstract RCSupplierPriceQuery createAndAddtoPriceQueries(final Procedure1<RCSupplierPriceQuery> updater);
  
  public abstract RCBasePurchaseRequest removeFromPriceQueries(final RCSupplierPriceQuery rCSupplierPriceQuery);
  
  public abstract RCBasePurchaseRequest removeAllPriceQueries();
  
  public abstract Collection<? extends RCBasePurchaseOrder> getPurchaseOrders();
  
  public abstract RCProjectMoney getTotalOrderAmount();
  
  public abstract RCProjectMoney getTotalRequestedAmount();
  
  public abstract RCExchangeRate getExchangeRate();
  
  public abstract RCPurchaseRequestProcess getProcess();
  
  public abstract void auditPassed();
  
  public abstract void postCancel();
  
  public abstract RCProject getProject();
  
  public abstract RCBasePurchaseRequestProxy toProxy();
}
